#ifndef __WIZ_DATATYPE_POINTER_HPP__SHANHAOBO_19800429__
#define __WIZ_DATATYPE_POINTER_HPP__SHANHAOBO_19800429__

#include "../Base/WizBase.hpp"

namespace Wiz
{
    namespace Pointer
    {
        template<class RawT>
        struct Type : public ::Wiz::Operators::Comparable< Type<RawT>, RawT*, ::Wiz::Ptr::Type<RawT> >
        {
        protected:
            typedef Type                tThis;
            typedef RawT                tRaw;
            typedef tRaw&               tRawRef;
            typedef tRaw const&         tRawRefConst;
            typedef tRaw*               tRawPtr;
            typedef tRaw const*         tRawConstPtr;
            typedef tRaw const * const  tRowFixedConstPtr;
            ////////////////////////////////////////////////////////////////////////
        public:
            Type()
            {
                m_RawPtr = WIZ_NULLPTR;
            }
            Type(tRawPtr ObjPtr)
            {
                m_RawPtr = ObjPtr;
            }
            Type(tThis const & Other)
            {
                m_RawPtr = Other.m_RawPtr;
            }
        public:
            WIZ_OPERATORS_COMPARABLE_ALL(tThis, tRawPtr, m_RawPtr)
        };
    } /// end of namespace DataType

    template<class RawT>
    ::Wiz::Void::Type Swap(::Wiz::Pointer::Type<RawT>& Lhs, ::Wiz::Pointer::Type<RawT>& Rhs)
    {
        Lhs.Swap(Rhs);
    }
} /// end of namespace Wiz

#endif /*__WIZ_DATATYPE_POINTER_HPP__SHANHAOBO_19800429__*/
